package com.baofu.paycore.service.facade;

import com.baofu.paycore.service.facade.model.CancelPayDTO;
import com.system.commons.result.Result;
import com.baofu.paycore.service.facade.model.CancelResDTO;
import com.baofu.paycore.service.facade.model.ReverseResDTO;
import com.baofu.paycore.service.facade.model.authorize.AuthorizeDTO;
import com.baofu.paycore.service.facade.model.authorize.AuthorizeResDTO;
import com.baofu.paycore.service.facade.model.authorize.AuthorizeReverseDTO;
import com.baofu.paycore.service.facade.model.authorize.AuthorizeCancelDTO;

/**
 * 预授权相关服务
 *
 * <p>预授权请求、撤销、冲正、撤销冲正</p>
 *
 * @author LZQ
 * @version 1.0.0 createTime: 14/12/8 下午8:46
 */
public interface AuthorizeServiceFacade {

    /**
     * 预授权接口
     *
     * @param authorizeDTO              预授权请求参数
     * @return                          预授权响应
     *                                  response.isSuccess()标示方法的远程调用状态，方法实际执行结果从result 取值
     */
    Result<AuthorizeResDTO> authorize(AuthorizeDTO authorizeDTO, String transLogId);

    /**
     * 预授权撤销接口
     *
     * @param cancelPayDTO              预授权撤销请求参数
     * @return                          预授权撤销响应
     *                                  response.isSuccess()标示方法的远程调用状态，方法实际执行结果从result 取值
     */
    Result<CancelResDTO> authorizeCancel(CancelPayDTO cancelPayDTO, String transLogId);

    /**
     * 预授权冲正接口
     *
     * @param reverseDTO                预授权冲正请求参数
     * @return                          预授权冲正响应
     *                                  response.isSuccess()标示方法的远程调用状态，方法实际执行结果从result 取值
     */
    Result<ReverseResDTO> authorizeReverse(AuthorizeReverseDTO reverseDTO, String transLogId);

    /**
     * 预授权撤销冲正接口
     *
     * @param cancelAuthorizeDTO        预授权撤销冲正请求参数
     * @return                          预授权撤销冲正响应
     *                                  response.isSuccess()标示方法的远程调用状态，方法实际执行结果从result 取值
     */
    Result<CancelResDTO> cancelAuthorizeReverse(AuthorizeCancelDTO cancelAuthorizeDTO, String transLogId);
}
